/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package action;

import DAO.Constantes;
import DAO.DAO_Revista;
import actionForm.ModificarRevistaActionForm;
import clases.Articulo;
import clases.Revista;
import clases.Seccion;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import pdf.MergePDF;

/**
 *
 * @author Rafa
 */
public class CrearRevistaAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";

    /**
     * This is the action called from the Struts framework.
     *
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        ModificarRevistaActionForm formulario = (ModificarRevistaActionForm) form;
        DAO_Revista daoRevista = new DAO_Revista();
        Revista revista = daoRevista.consultaUltimaRevista(true);

        String ret = "";
        if (revista == null) {
            formulario.setErrorAlert(Constantes.getERROR_CREACION_REVISTA());
            ret = FAILURE;
        } else {
            //Se comprueba que la revista este desactivada
            if (revista.getEstadoRevista().getEstado().equals(Constantes.getREVISTA_DESACTIVADA())) {
                String rutaCarpetaArticulos = formulario.getUbicacionWebInf() + Constantes.getSEPARATOR()
                        + Constantes.getCARPETA_DATOS()
                        + Constantes.getSEPARATOR() + Constantes.getCARPETA_ARTICULOS();
                
                String portada = formulario.getUbicacionWebInf() + Constantes.getSEPARATOR()
                        + Constantes.getCARPETA_DATOS()
                        + Constantes.getSEPARATOR() + Constantes.getCARPETA_ARTICULOS() 
                        + Constantes.getSEPARATOR() + "portada.pdf";
                
                List<InputStream> pdfs = new ArrayList<InputStream>();
                Seccion[] listaSeccionesRevista = revista.getSeccions().toArray(new Seccion[]{});

                //Se añade la portada
                pdfs.add(new FileInputStream(portada));
                
                //Se añaden todos los articulos pertenecientes a la revista
                for (int i = 0; i < listaSeccionesRevista.length; i++) {
                    Articulo[] listaArticulos = listaSeccionesRevista[i].getArticulos().toArray(new Articulo[]{});

                    String nombrePDF = rutaCarpetaArticulos
                            + Constantes.getSEPARATOR() + listaArticulos[i].getIdArticulo() + ".pdf";
                    pdfs.add(new FileInputStream(nombrePDF));
                }

                try {
                    OutputStream output = new FileOutputStream(rutaCarpetaArticulos
                            + Constantes.getSEPARATOR() + revista.getNumero() + ".pdf");
                    MergePDF.concatPDFs(pdfs, output, true);

                    //Se cambia el estado de la revista a: Publicada
                    boolean ok = daoRevista.actalizaEstadoRevista(revista, Constantes.getREVISTA_PUBLICADA(), false);
                    if (ok == false) {
                        formulario.setErrorAlert(Constantes.getERROR_CREACION_REVISTA());
                        ret = FAILURE;
                    } else {
                        formulario.setMensajeAlert(Constantes.getMENSAJE_CREACION_REVISTA());
                        ret = SUCCESS;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                    ret = FAILURE;
                }
            }
        }

        return mapping.findForward(ret);
    }
}
